{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# How to use the RNN Disaggregator with NILMTK\n",
    "\n",
    "This is an example on how to train and use the Recurrent Network (RNN) disaggregator on the [REDD](http://redd.csail.mit.edu/) dataset using [NILMTK](https://github.com/nilmtk/NILMTK/).\n",
    "\n",
    "This network was described in the [Neural NILM](https://arxiv.org/pdf/1507.06594.pdf) paper."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First of all, we need to train the RNNDisaggregator using the train data. For this example, both train and test data are consumption data of the microwave of the first REDD building."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import warnings; warnings.filterwarnings('ignore')\n",
    "\n",
    "from nilmtk import DataSet\n",
    "train = DataSet('redd.h5')\n",
    "train.set_window(end=\"30-4-2011\") #Use data only until 4/30/2011\n",
    "train_elec = train.buildings[1].elec"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we need to define the disaggregator model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "from rnndisaggregator import RNNDisaggregator\n",
    "rnn = RNNDisaggregator()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Then train the model. We need to input the train data as well as their sample period. Also, we need to pass the desired number of training epochs. Finally, save the model for later use."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/5\n",
      "1003066/1003066 [==============================] - 127s - loss: 6.1677e-04   \n",
      "Epoch 2/5\n",
      "1003066/1003066 [==============================] - 126s - loss: 6.1496e-04   \n",
      "Epoch 3/5\n",
      "1003066/1003066 [==============================] - 118s - loss: 6.1347e-04   \n",
      "Epoch 4/5\n",
      "1003066/1003066 [==============================] - 114s - loss: 6.1133e-04   \n",
      "Epoch 5/5\n",
      "1003066/1003066 [==============================] - 114s - loss: 6.1094e-04   \n"
     ]
    }
   ],
   "source": [
    "train_mains = train_elec.mains().all_meters()[0] # The aggregated meter that provides the input\n",
    "train_meter = train_elec.submeters()['microwave'] # The microwave meter that is used as a training target\n",
    "\n",
    "rnn.train(train_mains, train_meter, epochs=5, sample_period=1)\n",
    "rnn.export_model(\"model-redd5.h5\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now that the model is trained, we can use it to disaggregate energy data. Let's test it on the rest of the data from building 1.\n",
    "\n",
    "First we use the model to predict the microwave consumption. The results are saved automatically in a .h5 datastore."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "New sensible chunk: 121482\n",
      "New sensible chunk: 112661\n",
      "New sensible chunk: 87770\n",
      "New sensible chunk: 54084\n",
      "New sensible chunk: 2660\n",
      "New sensible chunk: 33513\n",
      "New sensible chunk: 138535\n",
      "New sensible chunk: 32514\n",
      "New sensible chunk: 27255\n",
      "New sensible chunk: 34833\n",
      "New sensible chunk: 100831\n"
     ]
    }
   ],
   "source": [
    "test = DataSet('redd.h5')\n",
    "test.set_window(start=\"30-4-2011\")\n",
    "test_elec = test.buildings[1].elec\n",
    "test_mains = test_elec.mains().all_meters()[0]\n",
    "\n",
    "disag_filename = 'disag-out.h5' # The filename of the resulting datastore\n",
    "from nilmtk.datastore import HDFDataStore\n",
    "output = HDFDataStore(disag_filename, 'w')\n",
    "\n",
    "# test_mains: The aggregated signal meter\n",
    "# output: The output datastore\n",
    "# train_meter: This is used in order to copy the metadata of the train meter into the datastore\n",
    "rnn.disaggregate(test_mains, output, train_meter, sample_period=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's plot the results and compare them to the ground truth signal.\n",
    "\n",
    "**Note:** Calling plot this way, downsamples the signal to reduce computing time. To plot the entire signal call\n",
    "```\n",
    "predicted.power_series_all_data().plot()\n",
    "ground_truth.power_series_all_data().plot()\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAFyCAYAAAAnENp+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xt8FOXd///XZ0lISCBBDXISRFER7f21Ek/UBlRsBWq9\nPbRiUPG2VaxYrej9bbFKpdpaayt4e+it1v7uWi0UxFoUqxatlYB8wRKs1gLFuyJnEAgJOZCQ5Pr9\nsZuwmxObzW52Z+f9fDxCyMw1s9fs7M71mes05pxDREREJFkCyc6AiIiI+JuCEREREUkqBSMiIiKS\nVApGREREJKkUjIiIiEhSKRgRERGRpFIwIiIiIkmlYERERESSSsGIiIiIJJWCEREREUmqlAhGzKzI\nzF42s61m1mhml7SRZqSZLTKzfWZWaWYrzeyYsPVZZvaEme02s/1mttDMjm6xjyPM7LdmVm5mZWb2\njJnldscxioiISNtSIhgBcoH3gWlAq4flmNlwoAT4BzAG+DfgfuBAWLJHgK8AV4TSDAJebLGrucBI\nYFwo7RjgqTgeh4iIiHSSpdqD8sysEbjUOfdy2LJ5QJ1z7rp2tskDPgOucs69FFo2AlgLnOOcW2Vm\nI4GPgELn3JpQmouAV4FjnHM7EnlcIiIi0rZUqRlpl5kZwVqMDWb2upntNLP/Z2b/HpasEMgA3mpa\n4JxbD2wCRocWnQOUNQUiIW8SrIk5O5HHICIiIu1L+WAEOBroDXwP+CPwJeAl4PdmVhRKM4BgzUlF\ni213htY1pdkVvtI51wDsDUsjIiIi3Swj2RmIQlPA9Afn3KOh/39gZl8AvkWwL0lCmNlRwEXARiL7\np4iIiEjHsoFhwBvOuT0dJfRCMLIbqCfY/yPcWuDc0P93AD3NLK9F7Uj/0LqmNC1H1/QAjgxL09JF\nwG9jz7qIiIjvXU1wAEm7Uj4Ycc4dNLP3gBEtVp0EfBr6/2qCAcs4gk04TR1YhwIrQmlWAH3N7PSw\nfiPjAANWtvPyGwGef/55Ro4c2fWDiaPp06czZ86cZGcjYdL9+EDHmA7S/fgg/Y8xmuP72fKfUddQ\nx91j7u6mXMVXss7h2rVrueaaayBUlnYkJYKR0FwfJxAMDACON7PTgL3Ouc3Az4DfmVkJ8DYwAbgY\nGAvgnKsws18Bs82sDNgPPAosd86tCqVZZ2ZvAL80s5uBnsBjwLwORtIcABg5ciSjRo3q1DHtO7CP\n8gPlHNv32E5tF638/PxO58lL0v34QMeYDtL9+CD9jzGa4/vdK78D4MVRLWeL8IYUOIeH7eaQEsEI\ncAbBIMOFfh4OLX8W+IZz7g9m9i3g+8B/AeuBy51zK8L2MR1oABYCWcDrwC0tXmcy8DjBUTSNobTf\nScQBnf7U6WzctxF3b2oNnRYREUk1KRGMOOfe4TAje5xzvwZ+3cH6WuDW0E97afYB18SUyU7auG9j\nd7yMiIiI53lhaK+IiIikMQUjHlVcXJzsLCRUuh8f6BjTQbofH6T/Mab78YE3jjHlpoNPJWY2Cli9\nevXqTnf+sR8G++Kqz4iIpIpNmzaxe/fuZGfDcwqfKgRg9U2rk5yT1FNQUMDQoUPbXFdaWkphYSEE\nH8NS2tF+UqLPiIiIJNamTZsYOXIk1dXVyc6KZxU+XZjsLKScnJwc1q5d225AEi0FIyIiPrB7926q\nq6tTct4k8aameUR2796tYERERKIXy7xJIommDqwiPrdq6ypmvDkj2dkQER9TMCLicxN+O4GfLv9p\nsrMhIj6mYERERESSSsGIiIiIJJWCERER8a1AIMB9992X7Gz4noIRERHxvGeffZZAIEAgEODdd99t\nM82QIUMIBAJccsklzcvMDDNrM710Hw3tFRGRtNGrVy/mzp3LF77whYjl77zzDlu3biU7OztieU1N\nDRkZKgqTTTUjIiKSNiZOnMgLL7xAY2NjxPK5c+dyxhlnMGDAgIjlPXv2JBDoelGomW27RsGIiIik\nBTOjuLiYPXv2sGTJkublBw8eZOHChUyePJmWz2Nrq8/Itm3b+OY3v8ngwYPJzs7m+OOPZ9q0adTX\n1wOHmoSWLl3KtGnT6N+/P0OGDGnefs2aNUyYMIH8/Hz69OnDhRdeyMqVK5vXl5eXk5GRweOPP968\nbM+ePQQCAfr16xeRl5tvvplBgwY1/71s2TKuvPJKjj32WLKzsxk6dCh33HEHBw4caE7z8MMPEwgE\n2Lx5c6v36K677iIrK4vy8vLmZStXrmT8+PH07duX3NxczjvvvHabuhJFwYiIiKSNYcOGcc455zBv\n3rzmZX/84x+pqKjgqquuOuz227dv58wzz2TBggUUFxfz2GOPMWXKFJYuXdqq9mPatGmsW7eOe++9\nlxkzghMHfvTRR4wZM4YPP/yQGTNm8IMf/ICNGzdy3nnn8d577wGQn5/P5z73OZYuXdq8r2XLlhEI\nBNi7dy9r166NWF5UVNT89wsvvEBNTQ3Tpk3j8ccfZ/z48Tz22GNcd911zWmuvPJKzIwFCxa0Or4X\nXniB8ePHk5+fD8Cf//xnxo4dS2VlJbNmzeInP/kJ5eXlXHDBBfz1r3897PsVL2ooExGRtDJ58mS+\n//3vU1tbS1ZWFnPnzmXs2LGtmmjaMmPGDHbt2sWqVas4/fTTm5fPmjWrVdqCggLeeuutiA6w99xz\nD/X19Sxfvpxjjz0WgGuvvZYRI0bw3e9+l7fffhuAoqIiXnzxxebtSkpKKCoqYt26dZSUlDBy5EjK\nysr4xz/+wU033dSc7qGHHiIrK6v57xtuuIHhw4dz9913s2XLFo455hiGDBnCOeecw/z587nzzjub\n07733nv861//iqgJuvnmmxk3bhyvvvpq87KbbrqJU045hXvuuYfXX3/9sO9ZPCgYETmM8gPl5PbM\nJSOgr4v4Q3U1rFuX+Nc5+WTIyYn/fq+88kpuv/12Fi9ezEUXXcTixYsjmkTa45xj0aJFXHLJJRGB\nSFvMjBtvvDEiEGlsbGTJkiVcdtllzYEIwIABA5g8eTLPPPMMlZWV9O7dm6KiIn7xi1+wYcMGTjzx\nREpKShg/fjz9+vWjpKSEqVOnUlJSAhBRMxIeiFRXV1NTU8Po0aNpbGxkzZo1HHPMMQBMmjSJ6dOn\n88knn3DccccBMH/+fLKzs5tHE73//vts2LCBmTNnsmfPnoj3Ydy4cTz//POHfc/iRVdXkcPo+9O+\nXPN/ruG5y55LdlZEusW6dVBYmPjXWb0aEvHMvoKCAi688ELmzp1LVVUVjY2NfO1rXzvsdp999hkV\nFRWceuqpUb3OsGHDWm1fXV3NSSed1CrtyJEjaWxsZPPmzYwcOZKioiKcc5SUlDB48GDWrFnDj3/8\nYwoKCnj44YeBYG1JXl4ep512WvN+Nm/ezMyZM3nllVcoKytrXm5mEf1Avv71r3PHHXcwf/785iak\nhQsXMmHCBHr37g3Ahg0bAJgyZUqbxxcIBCgvL29u0kkkBSMiUfjDuj8kOwsi3ebkk4OBQne8TqJM\nnjyZG2+8ke3btzNhwgT69OkT99fo1atXzNsOHDiQ4447jqVLlzbXoowePZqCggJuv/12Nm/ezLJl\nyyKGKDc2NnLhhReyb98+7rrrLkaMGEFubi5bt27luuuuixhBNHDgQIqKiliwYAEzZsxgxYoVbNq0\niZ/97GcR+4Ngh9fwgCdcU+CSaApGREQkQk5OYmosutNll13GTTfdxMqVK5k/f35U2/Tr14+8vDz+\n/ve/x/Sa/fr1Iycnh/Xr17dat3btWgKBQMSom6KiIkpKShg2bBif//znyc3N5bTTTiM/P5/XXnuN\n0tLSiP4dH374IRs2bOC5557j6quvbl7+5ptvtpmfSZMmccstt7Bhwwbmz59Pbm4uF198cfP64cOH\nA9CnTx8uuOCCmI45XjSaRkRE0k5ubi5PPvkks2bN4qtf/WpU25gZl156Ka+88gqlpaWdfs1AIMCX\nv/xlFi1axKZNm5qX79y5k3nz5lFUVBRR01BUVMQnn3zCggULmvuFmBmjR49m9uzZ1NfXR/QX6dGj\nB0CrOVQeeeSRNmeRveKKKwgEAsydO5eFCxdy8cUXR9TmFBYWMnz4cH7+859TVVXVavvdu3d3+j2I\nlWpGREQkLbScQ+Taa6/t9D4eeOABlixZwpgxY5g6dSojR45k27ZtLFy4kOXLl5OXl9fmazX50Y9+\nxJtvvsm5557LtGnT6NGjB08//TR1dXU89NBDEWmbAo3169fzwAMPNC8fM2YMr732GtnZ2Zx55pnN\ny08++WSGDx/OnXfeyZYtW8jLy+PFF19k3759bealX79+nH/++cyePZvKykomTZoUsd7MeOaZZ5g4\ncSKnnnoq119/PYMHD2br1q28/fbb5Ofns2jRok6/h7FQMCIiImkhmmfMtHwWTcu/Bw0axMqVK5k5\ncyZz586loqKCwYMHM3HiRHLChv6091qnnHIKJSUl3HXXXTz44IM0NjZyzjnnNM8AG+6kk07i6KOP\nZvfu3Xzxi19sXl5UVISZcfbZZ5OZmdm8PCMjg8WLF3Pbbbfx4IMPkp2dzeWXX84tt9zSbp+PSZMm\n8dZbb5GXl8fEiRNbrR87diwrVqzg/vvv54knnqCyspIBAwZw9tlnRwwpTjRrL7rrTmZWBPxfoBAY\nCFzqnHu5nbRPAlOB251zj4YtzwJmA5OALOANYJpzbldYmiOAx4GLgUbgReA7zrnW9VPB9KOA1atX\nr2ZUJxtQ7YfBD6q7N/nvr3SN/dDo3bM3++/an+ysJMRRDx3F3pq9+qymudLSUgoLC4nleibSlsN9\npprWA4XOuQ7bvVKlz0gu8D4wDWj3imhmlwFnA1vbWP0I8BXgCmAMMIhgsBFuLjASGBdKOwZ4qot5\nFxERkS5IiWYa59zrwOsA1k7dl5kNBv4LuAj4Y4t1ecA3gKucc++Ell0PrDWzs5xzq8xsZGjbQufc\nmlCaW4FXzew/nXM7EnN0IiIi0pFUqRnpUChA+Q3wkHNubRtJCgkGVm81LXDOrQc2AaNDi84BypoC\nkZA3CdbEnJ2IfIuIiMjheSIYAWYAdc659ubzHRBaX9Fi+c7QuqY0u8JXOucagL1haURERKSbpUQz\nTUfMrBC4Dej4QQEiIiLiSSkfjABfBPoBm8O6k/QAZpvZ7c6544EdQE8zy2tRO9I/tI7Q76PDd2xm\nPYAjw9K0afr06a3m5i8uLqa4uDi2IxIREUkj8+bNY968eRHLwp+VczheCEZ+AyxpsexPoeX/E/p7\nNVBPcJTMSwBmNgIYCqwIpVkB9DWz08P6jYwDDFjZUQbmzJmjoXAiIiLtaOsGPWxo72GlRDBiZrnA\nCQQDA4Djzew0YK9zbjNQ1iL9QWCHc24DgHOuwsx+RbC2pAzYDzwKLHfOrQqlWWdmbwC/NLObgZ7A\nY8A8jaQRERFJnpQIRoAzgLcJjmxxwMOh5c8SHLLbUltzkUwHGoCFBCc9ex24pUWayQQnPXuT4KRn\nC4HvdDHvIiIi0gUpEYyE5gaJemRPqJ9Iy2W1wK2hn/a22wdcE0seRUREJDG8MrRXRERE0pSCERER\n8a1AIMB9992X7Gz4noIRERHxvGeffZZAIEAgEODdd99tM82QIUMIBAJccsklzctaPrVXkiMl+oyI\niIjEQ69evZg7dy5f+MIXIpa/8847bN26lezs7IjlNTU1ZGSoKEw21YyIiEjamDhxIi+88AKNjY0R\ny+fOncsZZ5zBgAGRT//o2bMngUDXi8Lq6uou78PPFIyIiEhaMDOKi4vZs2cPS5Ycmivz4MGDLFy4\nkMmTJ+Nc5MwQbfUZ2bZtG9/85jcZPHgw2dnZHH/88UybNo36+nrgUJPQ0qVLmTZtGv3792fIkCHN\n269Zs4YJEyaQn59Pnz59uPDCC1m58tDcmuXl5WRkZPD444cet7Znzx4CgQD9+vWLyMvNN9/MoEGD\nmv9etmwZV155JcceeyzZ2dkMHTqUO+64gwMHDjSnefjhhwkEAmzevLnVe3TXXXeRlZUVMTvqypUr\nGT9+PH379iU3N5fzzjuv3aauRFEwIiIiaWPYsGGcc845EVOT//GPf6SiooKrrrrqsNtv376dM888\nkwULFlBcXMxjjz3GlClTWLp0aavaj2nTprFu3TruvfdeZsyYAcBHH33EmDFj+PDDD5kxYwY/+MEP\n2LhxI+eddx7vvfceAPn5+Xzuc59j6dKlzftatmwZgUCAvXv3snbt2ojlRUVFzX+/8MIL1NTUMG3a\nNB5//HHGjx/PY489xnXXXdec5sorr8TMWLBgQavje+GFFxg/fnzzI07+/Oc/M3bsWCorK5k1axY/\n+clPKC8v54ILLuCvf/3rYd+veFFDmYgA4JxTRz5JC5MnT+b73/8+tbW1ZGVlMXfuXMaOHduqiaYt\nM2bMYNeuXaxatYrTTz/0fNZZs2a1SltQUMBbb70V8b255557qK+vZ/ny5Rx77LEAXHvttYwYMYLv\nfve7vP322wAUFRXx4osvNm9XUlJCUVER69ato6SkhJEjR1JWVsY//vEPbrrppuZ0Dz30EFlZWc1/\n33DDDQwfPpy7776bLVu2cMwxxzBkyBDOOecc5s+fz5133tmc9r333uNf//pXRE3QzTffzLhx43j1\n1Vebl910002ccsop3HPPPbz++uuHfc/iQcGIiIhEqD5Yzbrd6xL+OicXnExOZk7c93vllVdy++23\ns3jxYi666CIWL14c0STSHuccixYt4pJLLokIRNpiZtx4440RgUhjYyNLlizhsssuaw5EAAYMGMDk\nyZN55plnqKyspHfv3hQVFfGLX/yCDRs2cOKJJ1JSUsL48ePp168fJSUlTJ06lZKSEoCImpHwQKS6\nupqamhpGjx5NY2Mja9as4ZhjjgFg0qRJTJ8+nU8++YTjjjsOgPnz55Odnd08muj9999nw4YNzJw5\nkz179kS8D+PGjeP5558/7HsWLwpGRAQAh8NQzYjAut3rKHw6ugecdcXqqasZNTD+DyEtKCjgwgsv\nZO7cuVRVVdHY2MjXvva1w2732WefUVFRwamnnhrV6wwbNqzV9tXV1Zx00kmt0o4cOZLGxkY2b97M\nyJEjKSoqwjlHSUkJgwcPZs2aNfz4xz+moKCAhx8OPhGlpKSEvLw8TjvttOb9bN68mZkzZ/LKK69Q\nVnbosW1mFtEP5Otf/zp33HEH8+fPb25CWrhwIRMmTKB3794AbNiwAYApU6a0eXyBQIDy8vJWT61P\nBAUjIiIS4eSCk1k9dXW3vE6iTJ48mRtvvJHt27czYcIE+vTpE/fX6NWrV8zbDhw4kOOOO46lS5c2\n16KMHj2agoICbr/9djZv3syyZcsihig3NjZy4YUXsm/fPu666y5GjBhBbm4uW7du5brrrosYQTRw\n4ECKiopYsGABM2bMYMWKFWzatImf/exnEfuDYIfX8IAnXFPgkmgKRkQECFbNqmJEAHIycxJSY9Gd\nLrvsMm666SZWrlzJ/Pnzo9qmX79+5OXl8fe//z2m1+zXrx85OTmsX7++1bq1a9cSCAQiRt0UFRVR\nUlLCsGHD+PznP09ubi6nnXYa+fn5vPbaa5SWlkb07/jwww/ZsGEDzz33HFdffXXz8jfffLPN/Eya\nNIlbbrmFDRs2MH/+fHJzc7n44oub1w8fPhyAPn36cMEFF8R0zPGi0TQiIpJ2cnNzefLJJ5k1axZf\n/epXo9rGzLj00kt55ZVXKC0t7fRrBgIBvvzlL7No0SI2bdrUvHznzp3MmzePoqKiiJqGoqIiPvnk\nExYsWNDcL8TMGD16NLNnz6a+vj6iv0iPHj0AWs2h8sgjj7TZ+fyKK64gEAgwd+5cFi5cyMUXXxxR\nm1NYWMjw4cP5+c9/TlVVVavtd+/e3en3IFaqGRERINhnRMTLWs4hcu2113Z6Hw888ABLlixhzJgx\nTJ06lZEjR7Jt2zYWLlzI8uXLycvLa/O1mvzoRz/izTff5Nxzz2XatGn06NGDp59+mrq6Oh566KGI\ntE2Bxvr163nggQeal48ZM4bXXnuN7OxszjzzzOblJ598MsOHD+fOO+9ky5Yt5OXl8eKLL7Jv3742\n89KvXz/OP/98Zs+eTWVlJZMmTYpYb2Y888wzTJw4kVNPPZXrr7+ewYMHs3XrVt5++23y8/NZtGhR\np9/DWCgYEfG5potqexdXEa+IZmh6y2fRtPx70KBBrFy5kpkzZzJ37lwqKioYPHgwEydOJCcnJ2K7\ntpxyyimUlJRw11138eCDD9LY2Mg555zTPANsuJNOOomjjz6a3bt388UvfrF5eVFREWbG2WefTWZm\nZvPyjIwMFi9ezG233caDDz5IdnY2l19+Obfccku7fT4mTZrEW2+9RV5eHhMnTmy1fuzYsaxYsYL7\n77+fJ554gsrKSgYMGMDZZ58dMaQ40UwXoPaZ2Shg9erVqxk1qnPtp/bD4AfV3av31+vsh0bvnr3Z\nf9f+ZGclIY786ZGUHSij7p46MntkHn4D8aTS0lIKCwuJ5Xom0pbDfaaa1gOFzrkO273UZ0TE55ru\n8NRMIyLJomBEREREkkrBiIgA6jMiIsmjYERERESSSsGIiADqMyIiyaNgRKQDaroQEUk8BSMiAijw\nEpHkUTAi0gE/NV346VhFJLWkRDBiZkVm9rKZbTWzRjO7JGxdhpn91Mw+MLPKUJpnzWxgi31kmdkT\nZrbbzPab2UIzO7pFmiPM7LdmVm5mZWb2jJnldtdxiveotkBEJPFSZTr4XOB94FfA71usywE+D/wQ\n+AA4AngUWAScFZbuEWACcAVQATwBvAgUhaWZC/QHxgE9gV8DTwHXxPNgRLxIgZc/rF27NtlZkDQR\nz89SSgQjzrnXgdcBrMWE/865CuCi8GVm9m1gpZkd45zbYmZ5wDeAq5xz74TSXA+sNbOznHOrzGxk\naD+Fzrk1oTS3Aq+a2X8653Yk+DDFg9R0IemioKCAnJwcrrlG914SPzk5ORQUFHR5PykRjMSgL+CA\npkcVFhI8lreaEjjn1pvZJmA0sAo4ByhrCkRC3gzt52yCNS0ivqXAK70NHTqUtWvXdvhY+P21+znv\n1+dxVM5R/OnaP7WbrvCpQgBW37S6S3mK134SzSv5TIaCggKGDh3a5f14LhgxsyzgQWCuc64ytHgA\nUBeqRQm3M7SuKc2u8JXOuQYz2xuWRiSCmi4knQwdOrTDgqP8QDn8CTJ7Z3b8ML1BwV9dfuBevPaT\naF7Jp4elRAfWaJlZBvACwdqMaUnOjkhaUeAlqh2TZPFMzUhYIDIEuCCsVgRgB9DTzPJa1I70D61r\nStNydE0P4MiwNG2aPn06+fn5EcuKi4spLi6O5VDEQ3RxFhE5vHnz5jFv3ryIZeXl5VFv74lgJCwQ\nOR443zlX1iLJaqCe4CiZl0LbjACGAitCaVYAfc3s9LB+I+MAA1Z29Ppz5sxR9ZxP+am2QIGX+Onz\nLvHV1g16aWkphYWFUW2fEsFIaK6PEwgGBgDHm9lpwF5gO8Ehup8HLgYyzax/KN1e59xB51yFmf0K\nmG1mZcB+gsN/lzvnVgE459aZ2RvAL83sZoJDex8D5mkkjYgKIhFJnpQIRoAzgLcJ9gVxwMOh5c8S\nnF/kq6Hl74eWW+jv84GloWXTgQZgIZBFcKjwLS1eZzLwOMFRNI2htN+J+9FI2lBtgfiJPu+SLCkR\njITmBumoM+1hO9o652qBW0M/7aXZhyY4E2mTCiJR7Zgki6dG04h0N12cRUQST8GISAf8VFugwEv8\n9HmX1KJgRERERJJKwYhIB/xUW6C7YvHT511Si4IRERERSSoFIyId8FNtge6KxU+fd0ktCkZEBFBB\nJApIJXkUjIh0QBdnEZHEUzAi0gE/1RYo8BI/fd4ltSgYEenAZ58lOwciIulPwYhIB558Knin2NCQ\n5Ix0A90Vi2rHJFkUjIiIiEhSKRgR6ZB/7hR1VyyqHZNkUTCSYLrAe5suziIiiadgREQABV6imydJ\nHgUjCaYLvNf55/ypIBJdryRZFIyIiIhIUikYSTDdbXqbn+4U/XSs0jZdryRZFIwkmC7wIiIiHVMw\nItIh/wSTuisW3TxJsigYSTBd4L1NF2cRkcRTMCIigAIv0c2TJI+CkQTTBd7rdP5ERBJNwYiIALor\nFt08SfKkRDBiZkVm9rKZbTWzRjO7pI0095nZNjOrNrMlZnZCi/VZZvaEme02s/1mttDMjm6R5ggz\n+62ZlZtZmZk9Y2a5iTw2XeC9zU8XZz8dq7RN1ytJlpQIRoBc4H1gGm3Ui5vZ94BvA1OBs4Aq4A0z\n6xmW7BHgK8AVwBhgEPBii13NBUYC40JpxwBPxfNAREREpHMykp0BAOfc68DrAGZmbST5DnC/c25x\nKM0UYCdwKbDAzPKAbwBXOefeCaW5HlhrZmc551aZ2UjgIqDQObcmlOZW4FUz+0/n3I6EHJvuNj3O\nP+dPd8Wi65XEYs0a+N//ha99LfZ9pErNSLvM7DhgAPBW0zLnXAWwEhgdWnQGwcAqPM16YFNYmnOA\nsqZAJORNgqXN2YnKv3hbtBfnLVtg9uwEZ0ZEJAWNGgVf/3rX9pHywQjBQMQRrAkJtzO0DqA/UBcK\nUtpLMwDYFb7SOdcA7A1LE3e62/SHq6+GO++ExsZk5yR2uisWXa8kWbwQjHhaZy/wzsEzz0B1dYIy\nJJ0U3fmrq0twNkTSmIIgSYk+I4exAzCCtR/htSP9gTVhaXqaWV6L2pH+oXVNaVqOrukBHBmWpk3T\np08nPz8/YllxcTHFxcWdO5IorF0LN94I//wnPPRQ3HcvCebla6oKBElW7ZjDYbTVXVC8Yx6XXDIv\nYkl5eXnUW8cUjJjZUOBYIAf4DPjIOVcby74Oxzn3iZntIDgC5oPQ6+cR7OfxRCjZaqA+lOalUJoR\nwFBgRSjNCqCvmZ0e1m9kHMFAZ2VHeZgzZw6jRo2KNf+dSn/wYPD3/v0xvZzEWWPT+YvyNKo8Fy9T\nQCqxK+bllyNv0EtLSyksLIxq66iDETMbBtwMXAUcAxFhbJ2ZlQBPAy865zrVch6a6+OEsH0eb2an\nAXudc5viavmkAAAgAElEQVQJDtu9x8w+BjYC9wNbgEUQ7NBqZr8CZptZGbAfeBRY7pxbFUqzzsze\nAH5pZjcDPYHHgHmJGkkj6aDzzWxepT4jkizOOVQx4m9R9Rkxs0eBvwHHAfcApwD5BAv0AcBEYBlw\nH/CBmZ3ZyXycQbDJZTXBq//DQCnwQwDn3EMEA4enCNZi9AImOOfCW+qnA4uBhcBfgG0E5xwJNxlY\nR3AUzWJgKXBTJ/PaKbrAe1vzQPMoL5SeDka8nHmJC12vJFmirRmpAo53zu1pY90u4M+hnx+a2Xhg\nCPBetJkIzQ3SYWDknJsFzOpgfS1wa+invTT7gGuizZeILs4iiafvmUQVjDjn7op2h6EJzCREd5v+\n4uXTrQJBdL2SZIl6aK+Z/dDMxrSYgl0kzfmnz4hIsigIks7MMzKFYF+MfWb2lpndY2bnmpkXhgcn\nje42/cXL11QVCKLrlSRL1MGIc+444HjgFoIjWW4ASoAyM3vdzL5nZmclJpsiyRHLpHUi0jkKgqRT\nM7A65zY65/7HOXedc24YMJzgQ+x2Ad8H3o1/Fr1Nd5te559gRAWCJOt6peukxDwdvJkdC4wBxoZ+\nZxIcKiviW16+pqpAEAWkkiydmfRsKHAecH7odwHBmpB3gF8Cq1rM+yHoy+11On8iiafvmXSm8+lG\nYBPw36Gf1aGn3koHdLfpL14+3SoQRNcrSZbONNMsALKA7xGchfV2MxtlZprEV9KYf/qMiCSLgiCJ\numbEOXcVgJmdzKGmmv8LZJvZMoLNNX9xzkU986of6G7T25yPHpSnAkF0vZJk6XQHVufcOufcfzvn\nJjnnBgBfAN4nWFuyouOtRdKbynORzlMQJDFNWGZm/QnWjJxHsJbkJKCW4LwjEkZ3mx5nofPnhwfl\nqUDwPQ3tlWTpzGiaKzkUgIwADhJ8GN4C4G3g3dDD6kRERESi1pmakeeBvwIvEQw+ljvnahKSqzSi\nu02v808HVt2dSudnHHbEYwyDrpPSmWDkCOdcVcJyIpIGvFyeq0CQzgakDodF24Yp0oGoOrCaWW5n\nAhEzy409S+lFd5vepmfTiCSerpMS7Wiaj81shpkNbC+BBX3JzF4DbotP9kSSzT/BiAoEiaWZRiQe\nom2mOQ94AJhlZn8j2HdkG3AAOAI4BRgN1AM/AZ6Ke049SlXf/qJrs0jn6TopUQUjzrn1wBWh59N8\nHSgiOL9IL2A3sAa4EXhNU8RH0p2Dt/mpmUYFgsTSZ0QkHjo1z4hzbhPwcOhHxD90zRVJGN20Sadn\nYJXO0Z2D1/moZsTLmZe4SFafEV0nRcGISBypPBcvU0AqyaJgJME63QbrIn9LcjXGeP68SHen0lnx\n+swoCBIFIyId8lEw4uXMS1xoaK8kS6eCETPLMLMfmNkxicpQO68bMLP7zexfZlZtZh+b2T1tpLvP\nzLaF0iwxsxNarM8ysyfMbLeZ7TezhWZ2dCLzHutojDjMsCxx0NnzoGuzSOepVk46FYw45+qB/0uM\nT/vtghnATcA04GTgu8B3zezbTQnM7HvAt4GpwFlAFfCGmfUM288jwFeAK4AxwCDgxe44gGipMEst\nGtorfqKhvZIssQQVfwbGAhvjm5UOjQYWOedeD/29ycwmEww6mnwHuN85txjAzKYAO4FLgQVmlgd8\nA7jKOfdOKM31wFozO8s5tyoRGY+1z4iIiF+ouUdiCUZeAx40s38DVhOsgWjmnHs5Hhlr4V3gRjM7\n0Tm3wcxOA84FpgOY2XHAAOCtsHxUmNlKgoHMAuAMgscbnma9mW0KpUlIMNJZ+k6mGv8EkyoQREN7\nJVliCUZ+Efp9RxvrHNAj9uy060EgD1hnZg0Em5fuds79LrR+QOi1d7bYbmdoHUB/oM45V9FBmrjz\nUzV/OtL5ExFJvE4HI865ZIzAmQRMBq4C/gF8HvgvM9vmnHsuCflJGA3t9TYvnzfdnUqy+oyoVk66\n1BHVzLKdcwfilZkOPAT8xDn3Qujvj8xsGHAX8BywAzCCtR/htSP9CT43h1CanmaW16J2pH9oXbum\nT59Ofn5+xLLi4mKKi4sPm3F9ybxONSPiHxraK7GbxyWXzItYUl5eHvXWnQ5GzKwH8H3gW0B/MzvJ\nOfcvM7sf2Oic+1Vn9xmFHKDlA/gaCY0Gcs59YmY7gHHAB6F85gFnA0+E0q8m+FThccBLoTQjgKHA\nio5efM6cOYwaNSqmjGtor7c111R1Mr0XqWCRZPFKrZxzDtPFuR3FvPxy5A16aWkphYWFUW0dS5PL\n3cB/EBxeWxe2/O/ADTHsLxqvAPeY2UQzO9bMLiPYefX3YWkeCaX5aqhz7W+ALcAiCHZoBX4FzDaz\n88ysEPj/gOWJGkkTC5UHqcVPfUa8UiBI4mhoryRLLM00U4Cpzrm3zOzJsOV/IzgHSCJ8G7ifYC3H\n0cA24L9DywBwzj1kZjnAU0BfoASY4JwLD5imE6xhWQhkAa8DtyQoz0356mT6BGVEYqKbIJHE80qt\nnMNh6KKQCLEEI4OBj9tYHgAyu5adtjnnqgiO3mlrBE94ulnArA7W1wK3hn5Skke+kz7in2DSKwWC\nJI76jEiyxNJM8w+gqI3lX+NQZ1EJ8VM1fzry04PyRJLFK809Cr4SJ5aakfuAZ81sMMFg5vJQR9Ap\nwMXxzJwfaWivt3n5vHmlQJDE0dBeSZZO14w45xYBXwUuJDj76n3ASOCrzrkl8c2e9+lL5m1mqhkR\naY/frm8K2BMnpnlGnHMlwJfinBdBQ3u9zsvXZr8VLNJasgpbrxTy+o4kTqdrRszsPjM738yyE5Gh\ndKM+I97W6JGLpEg8aGivJEssHVhHE5z3Y5+ZlZjZj8zsQjPrFee8+ZKCkVTjn2BSBYski1dqHPQd\nSZxY+ox8ieA8HuOAPxJ8Gu7vCQYny+KbPe/TPCPe1tnWMi+fP68UCJI4GtoryRJrn5F6YLmZfQbs\nBfYDl5K4Sc88S8003qbzJ5J4XqlxUPCVOLH0GZlqZnPNbCvwLjAeWEawhqRfnPPnOxra621ePm9e\nKRAkcTS0V5IllpqRJ4HPgIeBXzjnKuObpfSiL5m3NV9sozyNOt0i6SX8Gq6APXFi6cB6OfBb4Crg\nMzN718weMLMvh54NI12gob3e5uVgRIGzJKvPiAr59NCVj0Ona0acc38A/gBgZvkEp4b/OrAYaAQ0\n5DeM+hx4nU6ISHv8EESEH6MC9o45F/uNdEwdWM3sKGAscF7o51SgjOCTcqUL9FlPNf4JJv1QsEjH\nklXYqpBPD91aM2JmHxKc/r0MWAr8EnjHOfdB7NlIXxra622dPR06f+JlGtrbmvqMRK9bgxGCHVjf\ncc79PfaXlfb44LvtMf4JJv1QsEhqSuVCPpXzlmq6u8/IE03/Nwu2DjldxdoVa58RvaPe5OXzpouu\naDr4jqmoS5xYRtNgZlNCzTU1QI2ZfWBm18Y3a/6kz3qq8U/NiEiypHIhr2aa6HV3n5E7gPuBx4Hl\nocVfBJ40swLn3JzYs5N+UvlLJofnpz4j+qyKhvZKV3R3n5FbgZudc78JW/aymX0EzAIUjHSB5hlJ\nNbpIirTHD0GEhvZGrytvTyzNNAMJTgPf0ruhdRJG84x4nX/Onx8KFumYhvZKV3R3MPIxcGUbyycB\nG2LPSnrS0F5/0fkTL9PQ3tbUZyR63d1Mcy8w38zGcKjPyLnAONoOUqQTfPDd9pSmi0+0p8XL588P\nBYukJhXy0umaEefci8DZwG7g0tDPbuAs59xL8c2e92lor794+bypQBAN7W1NfUai1901IzjnVgPX\nxP6y0h591lOL+vyIJJ4K+fTQLX1GzCxgZt81s+Vm9p6ZPWhmvWJ/6c4xs0Fm9pyZ7TazajP7m5mN\napHmPjPbFlq/xMxOaLE+y8yeCO1jv5ktNLOjE5lvfck8zvwTjOizKuoz0pr6jESvuzqw3g08AOwH\ntgLfAZ7ocIs4MbO+BPun1AIXEXw2zp0En4/TlOZ7wLeBqcBZQBXwhpn1DNvVI8BXgCuAMcAg4MVu\nOISoaWhvitG1R6Rd8SqcVcinh+5qppkCTHPOPQ1gZhcCr5rZDc65xtizEJUZwCbn3A1hyz5tkeY7\nwP3OucWh/E0BdhLs07LAzPKAbwBXOefeCaW5HlhrZmc551YlIuOq5ve2Rh+NhlKBIBra25r6jESv\nu2pGhgKvHXpR9ybB+8ZBsb981L4K/NXMFpjZTjMrNbPmwMTMjgMGAG+F5a8CWAmMDi06g2DwFZ5m\nPbApLE3S6bPubTp/4id+KJz9cIzx0l3BSAZwoMWyg0Bm7C8fteOBm4H1wJeB/wYeDXsezgCCgdHO\nFtvtDK0D6A/UhYKU9tLEneYZ8TY/nT9ddCVZtWNeqZXzSj69qDPNNAb82sxqw5ZlE3wmTVXTAufc\n5fHKXJgAsMo5NzP099/M7HPAt4DnEvB6SaOhvanFT8+mEdHQ3tbUTBO97uoz8mwby56P/aU7ZTuw\ntsWytUBT4LODYLDUn8jakf7AmrA0Pc0sr0XtSP/QunZNnz6d/Pz8iGXFxcUUFxcfNuPqM+JtvqoZ\n8UHBIqlJhXw6mMfkyfPIDGsrKS8vj3rrqIMR59z1ncpXfC0HRrRYNoJQJ1bn3CdmtoPgLLAfAIQ6\nrJ7NoRE/q4H6UJqXQmlGEOwLs6KjF58zZw6jRo3qKEm79CXzOv+cP31WRUN7W9PQ3mgV8/zzxRx1\n1KElpaWlFBYWRrV1TJOeJcEcYLmZ3QUsIBhk3ADcGJbmEeAeM/sY2AjcD2wBFkGwQ6uZ/QqYbWZl\nBIcoPwosT9RImlhoaG9q6ey11gfXZpG4UyGfHrp9Btbu5pz7q5ldBjwIzAQ+Ab7jnPtdWJqHzCwH\neAroC5QAE5xzdWG7mg40AAuBLOB14JaE5l3NNJ6mZhrxk2T1GUnlGhb1GYle2gcjAM65PwJ/PEya\nWcCsDtbXAreGflKSPuupRR1YRdqnwlnipdMPypPO8dOddTpqPn9Rnhcvnz8VLKKhva2pz0j0umue\nEekGGtrrbTpv4icqnCWcgpEUpj4j3uanmi0VLKLp4FtTn5HoKRgRSRAV0OInGtorXaFgJIXFemet\nob2pwU9De1WwSLKkctCvPiPRUzCSRlQepBY/NbPpQivRBKR+K5z9cIzxomAkhfmpMEtLPqoZEems\neNWmeaVWziv59CIFIylGn/XU4qdgUhdaiebznoiaglSuffBbTVBXqGYkhcXaZ0TlQmpo9NFoGpHO\nUuEs4RSMpDA/3VmnJR8106hgkc72GenO100WDe2NnoIRkQRRAS1+oqG90hUKRlKYhvb6i5evzSpY\nJBrqMyLtUTCSRlQepJamC1G0p0XnT7wsWU/tFVEwkmCx9hlRoZYafDXpmQoWiUJETYEPhvaqz0j0\nVDOSRhSMpBZn/umArAutNBW8HX0W/NZMI9FTMJLCNLTX2/z0oDyRzvJDEKE+I9FTMJJGFIykGDXT\niI80FbzWQQ96vw3tlegpGElh6jPibSqgRdrnhyBCfUaip2BEJEV4+VqlC61oOnjpCgUjKUx9RrxN\n08GLn2hob2vqM9I9FIwkmJppvM1PHVh1oZVo+K3PiJppoqeakTSiYMTbdN7EyzrbTKPCWcIpGElh\naqbxNl/VjHg585IU8apNS+VaOTXTRE/BSBpRMCLJogut6Km90hW+C0bMbIaZNZrZ7BbL7zOzbWZW\nbWZLzOyEFuuzzOwJM9ttZvvNbKGZHZ3IvKrPiLdFe/6apmXQeRM/6UoQ4ZUARM1S0fNVMGJmZwJT\ngb+1WP494NuhdWcBVcAbZtYzLNkjwFeAK4AxwCDgxW7ItnhUtF+udAgidaEVDe2VrvBNMGJmvYHn\ngRuAfS1Wfwe43zm32Dn3d2AKwWDj0tC2ecA3gOnOuXecc2uA64FzzeysROVZfUa8rfn8dTIoEfGD\nrgQRXglA1Geke3gqGAGeAF5xzv05fKGZHQcMAN5qWuacqwBWAqNDi84AMlqkWQ9sCkuTdApGUoyf\nHpSnC63vdWefkUQ8/VeSqyunMSN+2UgsM7sK+DzBoKKlAQTvXXe2WL4ztA6gP1AXClLaSxN36jPi\nbZ09Dzpv4mWdv16l/wdefUail/bBiJkdQ7C/x4XOuYPJzk8iKRhJLRraKxIponCOUzONauXSQ9oH\nI0Ah0A8otUOPk+wBjDGzbwMnA0aw9iO8dqQ/sCb0/x1ATzPLa1E70j+0rl3Tp08nPz8/YllxcTHF\nxcVtpu9K9aOCkdSi0yB+oqG9ranPSLTmcdtt8wgvKsvLy6Pe2ivByJvAv7VY9mtgLfCgc+5fZrYD\nGAd8AM0dVs8m2M8EYDVQH0rzUijNCGAosKKjF58zZw6jRo2Ky4EcjoKRVOOfob260Epn+WFor0Sr\nmEceKeb00w8tKS0tpbCwMKqtPRGMOOeqgH+ELzOzKmCPc25taNEjwD1m9jGwEbgf2AIsCu2jwsx+\nBcw2szJgP/AosNw5tyqu+U1S9WNVFeTmdtvL+YKG9oqfaGhva+oz0j28NpomXMSnwjn3EPAY8BTB\nUTS9gAnOubqwZNOBxcBC4C/ANoJzjsQ3Y0lopvnoI+jdG/7yl85tJx2LtQOyiB/4bWivdMwPfUZa\ncc5d0MayWcCsDrapBW4N/aSkWIORdeuCv1evhvPOi2uWfM1XHVg9UjhI4mhob8f0HemYbyY984qu\nNNOkQ3V/OunsadB5Ey/T0N7W1EwTPQUjaSTWYERBTKL4qGbEy5mXbpOIJ/WqxiE9KBhJMRramz50\nHsRPOttM44cgwm/H2xUKRtJIrMFI09DS5llYJE5c2L/t09Be8aN4De1VrVzXvf02fOELsH9/8vKg\nYCTFqPoxfUR7kfRyjVbTMapAEA3tbc0rfUb27oUVK+CgR+coVzASJ1Onwr//e9f34+VCzc903iSd\nRB2E+2Bor1f06BH83dCQvDz4cmhvqvnlLw/9X31G0ke0F0wvn7emJyyocJDmWrIOPgt+G9rrlT4j\nTcFIY2Py8qBmmjTi5UItHflpBlaRzkrlIMJvAqHSfMAAWBXXOcWjp2AkxWiekfSRyndC8aaCRZo+\n7x19Fvw2tNcrfUaaakYAli5NTh4UjKSQqio106QT1YyIn3T6epXCQYTfBMJK82SNqlQwkgIyQr1v\ndu3q2n5UqKWa9O8zEk0/AfGXaPuM+GFor9f6jHiVgpE4Oeqo4O/PPlMzTTrxQwdWkSYa2ttaKuct\nXCAFSnPVjKSAI48M/u5qzYikFj8000TTT0D8RUN725bK35FUqBlRMJICcnKCv9VnJN2kf82Immmk\nSXc+tTfR+4wXrzTTqGZEAMjKCv6uru7afrxcqPmZzpukk+ibJ+PTZ0S6TjUjAhzqvVxVpT4j6cQP\nF0w100gTDe1tzStDe1UzIsChKXiTVTOSwt8RT2u+EB3m/VUQKX6UykGE36hmRIDIYCQZfUaapgBW\nYRhfzefDOn5jvRyMqM+INOnsdPAa2ps6UiEY6QoFI3HSFAxUVXVtP10NRiTe0r8Dq0iTZA3tla5T\nM40ALWpGktAW2hSMJGvmvXTl2vhfm+k8HIyoz4i01N1De1M5wPFKn5FUqBlRMJICmoKBZPUZaQqG\nUvi74klRX5Q9HIyINNHQXu9KVs1I+KlTMJICmoKBZM0zomaaREvjmhH1GZEWNLT3EPUZ6ZiCkRQT\nr2aargYjaqaJLz8U1GqmkSYa2utdqhkRQM00aeswo2iaeLlmRCRWfggi1Geke3giGDGzu8xslZlV\nmNlOM3vJzE5qI919ZrbNzKrNbImZndBifZaZPWFmu81sv5ktNLOj45HHVGmmUXNNfB06D2qmkfTX\n2aG98XiteO4zEVI5b+FUM9I9ioDHgLOBC4FM4E9m1qspgZl9D/g2MBU4C6gC3jCznmH7eQT4CnAF\nMAYYBLwYjwwme9IzBSOJoaf2ip90vlnZXx/4VA7Yvd5nJKPrWUk859zE8L/N7D+AXUAhsCy0+DvA\n/c65xaE0U4CdwKXAAjPLA74BXOWceyeU5npgrZmd5Zxb1ZU8hs8zkoy20KZgqOm3xElTkJHONSPq\nMyItRNtnREN7U4dqRpKjL8FiYi+AmR0HDADeakrgnKsAVgKjQ4vOIBh8hadZD2wKSxOzpiCgrq5r\n+1HNSGpRzYj4iYb2epfXa0Y8F4yYmRFsblnmnPtHaPEAgsHJzhbJd4bWAfQH6kJBSntpYtbYGHxy\nb329+oykpzSuGVGfEWlBQ3sP0dDejvmqmaaFXwCnAOcmOyPhGhqgZ89gMNIVXR1No2aa+FJBLX7S\nndPBe6WZxivCm2m686bUl8GImT0OTASKnHPbw1btAIxg7Ud47Uh/YE1Ymp5mlteidqR/aF27pk+f\nTn5+fsSy4uJiiouLm/9uaAjWjNTVJXeeEdWMxJcfmmnUZ0Ra6o7p4L3CK31GwmtGknNTOo8f/Wge\nv/zloSXl5eVRb+2ZYCQUiPw7MNY5tyl8nXPuEzPbAYwDPgilzyM4+uaJULLVQH0ozUuhNCOAocCK\njl57zpw5jBo1qsP8NTZCTo5G06QvNdNI+tPQXu8KrxnpzmDk0Kkr5u67i7nkkkPrSktLKSwsjGo/\nnghGzOwXQDFwCVBlZv1Dq8qdcwdC/38EuMfMPgY2AvcDW4BFEOzQama/AmabWRmwH3gUWN7VkTRw\nqGYkWX1G1EyTGH6oGRGJlR+CCC/2GVEzTeJ8i+Ct6V9aLL8e+A2Ac+4hM8sBniI42qYEmOCcCx/f\nMh1oABYCWcDrwC3xyGBEMJLEp/aqZiTO/DDpmZppJKSz08H7YWivVyS/ZsQHwYhzLqpRP865WcCs\nDtbXAreGfuKqaTRNY2PXAgI106QW1YyInyggbU19Rjrm26G9qappNA1Afb2G9qaL5jvFNL5zU58R\naSnaPiPxGtqbyoW8V3h9NI2CkThpqhkBONiF4b3qM5KiDvPAPNWMSDrQ0N7WvNhnxIvlgIKROGm3\nZkRDez0t6iGOHg5G1GdEWtLQ3kO8coxmh/6vZhqfci74k50d/LsrE58pGPEmLwcjIk26czp4LzbT\neCWfCkZ8qikAaGqmSUafETXTJIYvakbUZ0Ra6I7p4L3CK8004dRnxKeaAoDmZpouBASqGUldHQ53\n9HIwomYaCdHQ3vSgmhGfalkzcvCg5hlJF9FeML0cjIhI+7wytDecghGfajrxh5ppYt+XmmlSi5/u\n2Px0rNK2zk4Hr6G9qUnNND7VqplG84ykj4gvmmpGJL1159DeRO8zXrzYZ8SLN6UKRuKgVQdW9RlJ\nG+k+A6vuTqUt3TG01ysFuxepmcanWjfTdP88I2qmSTz1GZF0p6G9ranPSMcUjKSQlsHIQTXTpI20\nrxnRiAZpg4b2epv6jPhUq2aag7HvS8FIaon2rsirwYhIOE0H35r6jHRMwUgKaT3PSPd/eNVMkyDh\nX7Q0bKbxSlW5pCavFM5+o2DEp1rPwBr7vlQzkmrS+2LrlbtT6R7RBKd+G9rrxT4jXiwHFIzEQYcd\nWNVnxNPCT4OaaSTdKSBtzSsBSDjVjPhUq2AkCUN71UyTGGnfgdUjd6fS/dr77Pt5Oniv5FPBiE/F\nczp41YykmDTvMyISTkN7W/NKABJOwYhPtezA2pUPgoKRVJPeo2m8eHcq3aM7AxOv8MrxxqMccM5h\nPzT+Z83/HCZd2//vLAUjcZAKfUbUTJMY6d5MIxJOQ3tb8+vQ3pr6GgCeeO+JDtMpGEkh8ZwOvqt5\nUM1I4qRjM41Xqsql+yXrOTXSdfEIRipqK6JKp2AkhXT4oDz1GfE0FdDiJ51tmtHQ3tQUj3Kg/EB5\n13fSCQpG4qDpxGdnB3+rmSZ9pPvQXq9UlUv380rBK63Fs2bEzDpMp5qRFNJ04jMzwUyTnqWX9O4z\n4pW7U+ke0QSnfhva69c+I+W10dWMKBiJkZndYmafmFmNmf0/Mzuzq/tsOvGBAGRkwMEuTAcfbaE2\nb968iL/TLRhpeXypIN59RlLxGOMt3Y8x3Y6vrYC05TGm29DedDuH0LociOUY1WckgcxsEvAwcC9w\nOvA34A0zK+jKfptOfI8ewWCkoRtqRlp+uNKtmSZVLhCJfFBeKhxjou9OU+EYEymdj6/p897RMaZD\nbdrhzqEX+4y0LAdi+Zw29Rk53DHHKxjJiH1TT5oOPOWc+w2AmX0L+ArwDeCh9jb69FPo3bv9nW7c\nGPzdVDOyc5eDUP+RHTsd//xn9Bncvz/4u66ODrerrIxcX1kZ/F1d3fF2h5OfH2xmqqo6fNojj4SC\nLoVxqeHTT6G2tu114f1/NnwMvTPbTtcUkJaVBd//gQOhT584Z9TDuvKZ7Ko+fQ59r9ozeDDk5nZP\nflKZhvamh6qq1uVDR9/Bmhro1Sty2cdbgjUj5VU1HW67adOh/+/YEfk6n34afZ59E4yYWSZQCDzQ\ntMw558zsTWB0R9tefnl0r9G7N+TlwS+fBm4LLrv3B3Dv6s7nd9s2GDGi4zRtrf/oo8NvFy8zZ8J9\n93XPayXS5ZdDaWk7K8ce+m9hoYN2gpYmc+cGfxYuhCuuiFsWE6a7qspPPjl5/WmKi+FwN4avvgoT\nJ8bvNdftXkfp9lIm/9vk+O20m2lob5AX+4y0VQ60WS5YI7h2GkjGlsP58PGW8qjLlFmzgj+x8E0w\nAhQAPYCdLZbvBDp8q78y6xccNWxgu+uzAr3IzKrn6X82cM1/57B+56f8YWtw3dn/sYgRt25pd9vK\n+n00ukbyMo9sXnZEX9i3r+VIjkZ21W7GOcdRWYMoeXQdF9w+M2JfRxwRvDOPVUMD/PaFCuj7KV8e\nm0f/7KEd9qQ+csgI4JrYXzBF3PzgO5Rse7PNdX/bt5S/7Qv+f/x/3cbR2UPaTGcG+XmwL9Tn691s\neP/Ph9bX1NdQVlPGwD4DMYLv6brd65j558hz6HBs3b+Vfjn9yOqRRfXBaspryxnYu+3P37b922hw\nDX6iWNIAABmrSURBVORl5ZGflR+xn+37t1Pv6umb1Ze8rLxW2za4BtbvWd/8931L76PBNTTnr6WW\neYtG0zFe2/Ekjq00ugY+q93C0VlDMOtaa/Lpg/4PmRd90GGapZbBqr84GhoP3875WfVnZGdk06dn\nn3bP4Y9LfgxA6fZS6hvr2VS+iROOPIHqg9U456g6WMW+A/sYmj+UrB5Z7KnZw6A+g9p873dU7qBP\nVp/m7QpyCthSsYUheUMIWICsjCwq6yopqynD4SivLeeEI04g0OJ9a3ANbNi7gYMNB+ndszdmRm19\nLXUNdeRk5pARyOB/y/63Of2Ul6Zw4pEntjrGbfu3Nf//zj/dyaqtq8jJzGFT+SYqaivIz86nsq6S\nE488kcxAJvvr9lN2oIyK2gqcc/QI9ODEI09k34F9zfv5/drf80nZJx2+7w7Htv3bOKrXUdQ11FHX\nUEd9Yz11jXUAZPXIon9u/4j3LS8rj5zMHGobavl478f0yepDbmYuB+oPsLdmL/nZ+by37T2+u+S7\nrT7TFbUVfFr+KR/u+rB52Q0v38CXhn8Jw3A4KmorOK7vceRm5lLXUMeGvRsYkjck4vvWI9ADw6hv\n7Lj93uHYXLGZfjn9+GTfJwQswIlHnkgP6wFA9cFqdtfsxjCOyTuG2vraiM+NmTFrSW/2Ve9nbxk0\nuHo+O7CFg66Oj578G+PviPyc7q3dwVu7fsf5R1/Jgbp6+vbKo9E1kJd5FM418tynwfv2nn13c9Wv\nZ7bKb7jMzOA8W0019E32bNzOq7M63LSZeaUNrKvMbCCwFRjtnFsZtvynwBjnXKvaETP7ArD8qKuP\nIrN/O/XzwL4D++iZ0ZMAAarrqzky+0iyM4PtNAcOHugwX5k9MjEz6urrDnsMvbOCbUWVtZWU/aGM\nIy494rDbdFZVZQZHZQwl+4i97KvZ12Haswafxb3n3Rv3PABMnz6dOXPmJGTfLf3uw9/x3AfPtbu+\n6X2vOVgTVWHVFjOjV0Yvqg9WNy9r7xzm9sylqi7YTtZU2NQcrGlzvzmZOcFCpaGW+hadlTpaF56m\ntqGWvKw8qg9WU1vfcdVPTmZOxDEcTlc+p7179qayrvLwCQ9j7LCxvLPxnXbXOxw7K3eSnZFN3+y+\nh91fdmY29Q311DfWt3t8R/c+mqq6KqrqqsgIZDCwz0A2l29u/r73yujFUb2OYnPFZuob61t9NsL1\nyuxFXUPw+pDZI5MDBw9EvDf76/aTGcikb6++9LAe9O7Zm52VLe+5ggb1GUROZg67a3ZT31hP7569\n6Z3Zmz01ezjYcJDKukp69+xN9cFqemX2oqquqs1jzMnMYUDvAeys2knNwRoaXSNH9DqCI7KPYFfV\nLvpm92VLRfAmLCOQQVZGFkflHEXPQE9qG2rZXL65+b10zh32cxf+ujX1NfQI9KCH9cDMmgvrBtcQ\ncb3tldmL2vpaGl2wDXVI/hD21uylvrGerIwsCnoVsKtqF7tf2k32V7JbvVZGjwyG5g2l7EAZfbP7\n8lnVZxxsPEhG4NA9/JG9jgzeEISuC0Pyh7C9cnvE923fgX3UNtRydO7R7Qb6TZrO65D8IdQ31rN9\n//bmdQELkJOZA0BlXWWra0p9Yz1lB8ooyClofp3eWb3Jyczh47kfk3dJ5A1JdmY22RnZ7KvZx47K\nHRyTfww9rEfzuejfuz9H9jqSf+75Z8zXvYM7D7Lnt3sAznXOvdtRWj8FI5lANXCFc+7lsOW/BvKd\nc5e1sc1k4LfdlkkREZH0c7Vzbm5HCXzTTOOcO2hmq4FxwMsAFmyDGAc82s5mbwBXAxuBjqs4RERE\nJFw2MIxgWdoh39SMAJjZlcCvgW8BqwiOrvkacLJz7rMkZk1ERMS3fFMzAuCcWxCaU+Q+oD/wPnCR\nAhEREZHk8VXNiIiIiKQeX83AKiIiIqlHwYiIiIgklYIRERERSSoFIynCzE4xs+n/f3tnHi9XUeXx\n7+8lQMK+BUhAFtk3WQIiMOIwEAn7IvsyziAoIzIMAgZmdAQBh3VYBXRAREBGBgQRCUvUkQGGgMjI\nOooSQHYQMOyE5PjHqZt303n9Xr/wXt/bp+v3+dSnu+tW3a5v36XPrTp1StLyVbdluBSdMTofZMYI\nis4H8Rkj8mVjpGJJGiHpOOA+fEXhT+nDxr+umaIzRueDzBhB0fkgPmNkvhAQHa7xwBbAocC1wPHA\nSpW2aOgVnTE6H2TGCIrOB/EZw/Llqb0VS9IKwIbALcACwJ+Ak4Azzay1BRtqruiM0fkgM0ZgjM4H\n8Rkj82VjpI2StBQwv5k9L6nHLK3gNGeZrwFHAhPM7IG2N/JDKjpjdD7IjKUyHcsYnQ/iM0bna1Qe\npmmD5DoVeAo4SNJ8jSeW5EtPmtlJwDvAlyQt0v7WzpuiM0bng8xYKtOxjNH5ID5jdL5mysbIMEvS\nYsD5wFbAI8D2eDfbHDKzmZKK8PxHAJ/FxwaRtFSdvaajM0bng8xYVqcyRueD+IzR+fpTNkaGXwb8\nHjgT2A9fwXC3dNIVKwd7QbMP0usNwJ3AJElfxz2n92tvswel6IzR+SAzRmCMzgfxGaPzNZeZ5TSE\nCVgQGN2Qt3jp/VeBx4CJTer3pNcvALNwB6UjqubqJsbofJkxBmN0vm5gjM43qN+i6gZESsDpwG+A\nXwD/AIxL+T30OgsLeAD4LrBCkVfax6i0bRZwasO2nsyY+TJjZozO1w2M0fkG/XtU3YAICZgPuAof\n49sXuAR4EJhcKiNgRHq/D/A0cGBp+8j0ughwILBa47bMmPkyY3czRufrBsbofPP8u1TdgAgJWBN4\nAti2lLcL8DxwYvrc01DnZuAnwEbAAcDpfex3RGO9zJj5MmP3Mkbn6wbG6Hzz/LtU3YBOTvR2pa0G\nvAF8rLRtFHA08D6wXMrrodfaHQ+8io/xvQd8sbzPuqTojNH5MmMMxuh83cAYne/DpjybZpCStLek\nXSStQe9spCWB/wf+uihnZu8C/4l3xX2zN9tmSlod+CdgceBK3GHpwqJAW0D6UXTG6HyQGQnAGJ0P\n4jNG5xtSVW0NdUrC53tPAx7GvZt/Dxxe2n4LfjJ9tJQ3PzAJd0BappR/JPA4sF4pr/JxvuiM0fky\nYwzG6HzdwBidb1h+s6obUPeEOxLtBTwEfAWfirU88B3gNmD1VG4XPGLe4cB8pfpHAL8FlizljSy9\n76F6r+7QjNH5MmMMxuh83cAYnW84Ux6mGVgjgVXxFRIvAt4zs2dxZ6L1gdcAzOxG4L9x7+jdS/UX\nAZ4B3i4yLAWrkTTCzGZZH2sOtFnRGaPzQWaMwBidD+IzRucbPlVtDXVCAtYFRjXkbQr8DhhLr2PS\nSvic77eAS/EpW28Ch1TN0O2M0fkyYwzG6HzdwBidb7hSEds+qx+Z2SMwOxSvzC3TrXAr9wUzM0ky\ns6ckHQbcA6wHrAhsY2ZTq2p7X0ptncPxKRpjo6LzQWakgxjTU+5MNazGGoWvP0VnjM43XCostK6W\npPnN7P30fq4/6iZ1bgPuMrMTWyjbgzs+V/ZjJ4/sT5jZFREZ5cttL2hmfxxEnY7hK9pgZrNaPX6p\nTqcxjgOWNbMHGv+o+6nTMYySVgROAB40s3NarNMxfKkNo4F3B9OGTmKUtBAw03wGTKt1OoavKnW1\nz4hc3wSulvRtSZu0WG9hYAV8zA9JYyWdKWmdPsoW43xVXTiSdCHuFLX1IAyRjmBMfOcBU4GfSrpK\n0tppW9Pzu1P40vdL0rH4+DKDMEQ6hjG1YXN8vPxsSUsUhtcAdTqCMR3DbwNPAn8HjE75/d6DO4Uv\nfb8knQPcDlwnabv0xx3iWkx8ZwG3AjdJOljS4sW2fup1BF/V6lpjRNIOeBS8LXHP503xqVZ/1UL1\nNfDVFadJ+mc8VO+6wHONBc1s5lC1ebCSdAA+BrkRsKWZHTyIk7z2jJKKC3wT4HP4uOvy+DoPDPBU\nXXs+AElb4atwngbsJ2nNlN/vn3RSRzCWtBnwLD6G/vfQkuFVe0ZJh+NBrjbEo29eQbrPtNDzU3s+\ngPSnfDt+P70KWAg4Hzgpta2jr0VJu+GzXzYDLgZeAr4MbJ3a1d95Wnu+OqgrfUbkAWi+AFwGnJJO\ngBMkPYlfTP8zQBfxrsDawL3Au8D2ZjZl+FveuhLjJOAPZrZ5ylsN99J+08ymp7xmPSW1ZwQ+ASwD\nfNLMXgF+KWkC8DIMOORWe770VLk1Hnfg3/GFsCZKmlYMKw6g2jNC7/BT+vhDPLjTjpImm9ljnXwt\nSvoScBRwmJldmfJeBFaXNMbMXh5gF7XmK2lDYHVggpn9DrhI0iTgUEm/MbPL01N/X3+2tWaUtAqw\nIz475vTEcKWkl3Gjq+PvNXVQt/aMvAa8CFxh7kQ2KuVPBT4GzS351N04Bn+C+1czW9nMpqQuvBFt\naHurehI4DxgraaKki/FAOz8HpkravriAGp+y685Y6vJdBl+PYdGUPwZYAnhb0rr4nP+5uog7gK84\nHu8ANwEXmNkPgMnAfsDGLeyj1oxlla61bXFnvkvwYYzPFkX6qldnxtL3XwasYWZXls7DF/FZFe8M\nsI/a8hUqnasL4g+3b5Q2fx+PrXGCpPnSvbaj7jVJz+OzXi4ujKn0sPcg8IKkhQtDpEP56iGrwZSe\n4U74TW133Fu5WO1wrgh2wK/xJ5hm+ykcftcjrRnQbF8VMxbrGXwU/zObBfwA2AaYCPwYt9L3LnPV\nmbEJ3w7A3fgw23fxp4678GGNx4HzUrme0n5qyZfasHFjOxu2j8WHFk/FQ0I3K9cRjKW8nvT6PWCX\n9P7rwJ3AjXjAKDXUqSVjX3xFe0tt3hgfPh3focdwV2BzYOlS3t54tNFPN5TdKuVPamStK2MTvnK7\nz0z3modwI2MKcHDa1hH3mjqmyhswrHAe+/9ZPBzvH4BHgaNL28snyLL4ugAbDGL/lZ9UTRiPSduE\ndy8eg89QKOqsgD+xXErDfPi6MTbhO7bEtyawJ/6UclDKXyLdHD8AVi3K1pEvtWEHfBz5fmCTlNe4\namdhgE3C17XYscPO074YGw2MR4AN0/uv4UOKbwB79ncM68DYCl+p7MfxmBP7dtgx3DMxPoQ7Gk8F\ntkvb5sN9Ks4EFi7VWQI3Mn8IjK4zYxO+CaXthXFxBrAbPkSzNj58cy+wVJ356p7CDtOkLrDPAT8F\nNgA+BdwATJK0VypWHqJYH1gM/+Mr9jGmv++wFBmvKvXD+BVJ+5hfAXcD3zGzF1OdHjN7BverWNUG\nmJ5WJWM/fMdK2ttcv8WfMhfCn6Ixs9fwYaqXUj3SbzGXanAMdwZOwXtzDNhF0kibeybJLAAzOw13\n8NxbPg0WSRv19x01Zpx9/aVrbRqwkqT7cT+Ln+PGZ+Hb1tRpt+LzdEC+sszsXvxPerFUf8D7cMV8\nIyV9EXdGPQ13vv00buzvI2lJM5sBnA58Htis4E7X4pvAODPrd1iqKsYB+PaTtEi5vJkda2Y3AG+b\nWbHuzJJ49NSmqvo6rLvCGiPAUrile4uZvZ/+gM8G/gu4IDlTzaL3RrcL8ICZvSJpTUlTgG/Ip2XV\nVf0xnpcYX7PkrAo+Pp8uruXwYak6qz++80tjrmvQe0MotBbwAm6M1Vl/xH1BDgbuwB1Wt20slP7Y\nCt5TgE8CR0j6X+B7kpZpU3vnRQMymjtybgFcj5+Xa+CG6DPAPyZnz7qGwW7pGIIbHumP+h582JQa\ncxUahQ81XIgPmb1lZo8C1+DO468CmNm38F67o/DZiYUWAJ5oxeiqSAPxvQGzr8HZxmXp83J4b8rT\nbW95INX15BgKCR+rXLnISDe883CL98SUNyNdJKsAkyWdgZ9Y0/Hhjjfb3O7BqCXG2YWlBSUtB5wM\njAOubltL500D8Z2csn+F+5JcKukQeVyVc3C+F/t6Oq2RHgJOMLM/A+fiDrm7SVoq3exmX6PWOxPh\nTtxQm4QbYVua2UttbvdgNBBjYWTtBWxhZoea2SupN+9G3Ph8rZKWt6bBHMMihsR0YJR6nedrq3QP\nvBx34JwBFOfh68BLkkZJKh7qDsOdj38k6RuSLsGP67V1Nbpa4SuVLRxVF0r30nPxB6bL+ujNzBqE\nIhsjb+BDEWtLWraUPw0f4ztI0qIpb3Xct+IC/IlmMzPbw8zeqrE1D4NglDQRt/zvx+fKf8bM7mtz\newergfgOkLS4md2NOzy+ChyIG5Zbm9kZaSin1dgqbZeZzTSz91O3/lP409h4YKe0fY4buKTt8R6f\nh4F1zOwgM3uzzp75LTDOTK8/M7N7oHdWgpldbmZn17mLezDHsHScnsAN6tpylWVmU9ODm+j939gS\neMbM3jWzDyTJzH6NO5tfii8YNw7Yysx+Uk3LW9NAfOWykrbFp9pPxXuAdjZf+K7pcHBWC7IaOK7M\na6LJUsr0eucfhjuK7dWwfSfg/4CN0uel8e78Hcr7aLb/DmVcFDgen+Pe7747jG/jhvyyB3wP/Tg9\nVs3YUKZwjhuNd/lfA6yW8spLjK8A7N7AWNvjOFjGZser6uM41HzA/FUfs3lhLJUdhTuVN3XCLTPW\n4VocKr50Lz2S0syhOvB1eqrzU/+AMu8WGylpQsOToaXtF+NPkftKGl/aPhP3KfhzKveKmW1hZjfD\nHCF5K+9WHELG6Wb2b2Y2GXoZ20PRXEPA9zrM8ST9Svpcm7DK/TCWy1hq8zvAfwCr4Y6QmwDXKIW4\nN7NnzOx66JjztFxmIMa1mh2vqo/jUB3DgsN618KqTY9WK4wlLY/PoLkLQNKKko6TNLa0v9mMdbgW\nh4hv+XQvPdfMbkvbasHX6eooY6TJeNyR+Hjk7Mh+xU0hffwq7mB0lqTNJH0EH8O8CQ8+VN7/iFS/\nyrDKw81Y/GlXFVZ5WPgabwSdcAwbZb3DFT/CfUFOwKcMLoA7cvZZvgoNE+Ozzeq1W/kYDtiu8Xgw\nsLfk63s9iYc4f72xYN3vNU3UjO/Vxv1XeQwjqWOMkTQeaeXP6e3DwNOS1iqXL90U7sCHJ4rAX1Px\nE+1EM3urrzpVqU2MlVnv7eCrWoNl7KP+QpKOwYPTPYT7L+1gyaO/DorOGJ0PPjwjsDMeY+NhYA98\n1slBNsD03XapHXy5J2Ro1TFr06Qn5THAdsCt1rumw/v4GO1chkRxQprZHfKF8T6CB/+6s7y9TQgD\nKjpjdD6YN8YGzcIX4DrefKpkEYdCVRvLhaIzRueDD8coaTTuJP4WPovospTfk/Zdh2HD0HwhZTVw\nXOkrUYqOWsr7Mh7m+1ZgkVL+n4D90/uWnJT62n9mzHxVMtL3EgWVR22MzhidbygZ6XXA3aJOjNH5\nuiHVbphGHhSox3oXJBqn3um15+Fhl1cDLpdPcwT4JR4WHGvRarVqx2pDM0bng+FhtNL01ZL/UpWR\nN0MzRudLbRhSRkv/zObT6VGKLxLlGNaNr5tUK2MkdbnPMvd63lzSHbiT4mRJE83sAzN7HB/Dexa4\nWtLH8am5o9M+auOd3peiM0bng/YwVmloQXzG6HzQNsYqDa3QfF2nqrtm8PUZilgYwqMXHoevK3Iq\nvlLr6bgX8yYNdS/CT76XgfuqZulWxuh8mTEGY3S+bmCMztfNqdovh+3xpZinAGNT3jh8waKdS+WO\nwp3CrgCWadjH/vi44GPAClX/oN3GGJ0vM8ZgjM7XDYzR+bo9Vfvlvkz4LOB20rLwKX/T9LoNvvDS\nr4BjUtn9aXBWAv4mnaTLVv2DdhtjdL7MGIMxOl83MEbn6/bU7pOpCPE9f3rdFA8scy2+NPxGpbLL\n4iHaTwYWTXkP4Z7Ra5TKjcBXa30S2KnyHzQ4Y3S+zBiDMTpfNzBG58tpztQWB1ZJoyWdglurWAoT\njMc5mYJHKBwD7FOqtiveBXelmU2Xh8M2YAKwc2nO90w8ANb7uFVciaIzRueDzEgAxuh8EJ8xOl9W\nEw23tYOfQN/Cu8xmAf8CrJy2rYxbqCvj4353AhPTtgnADHx55lWA84FD8CA2C5b2vzw+BnglFc0F\nj84YnS8zxmCMztcNjNH5curn2LfpBJsI3AzcQe9qlmunbbcBh+Orkf4CuIQUoAa4HngKX+ztfmD1\n0j6LLrz5qMHYX3TG6HyZMQZjdL5uYIzOl1PfqS3DNGZ2C/AoMD2dZE8C10magHeVjTazZ9KJtw7w\nmVR1P2BHYAczG28+Z7zY56z0OsPM5lgMrgpFZ4zOl9qRGTucMTpfakdoxuh8WU3ULqsH2Ag/eS5L\nn8/CHZFmAN9PeUsDP8Yt3pX62Efl4b+7mTE6X2aMwRidrxsYo/PlNHdqWwRWM3sAn5K1vqQ9zOxo\n4DLcyeg9SfOb2SvAdcDPSEvDN+yjFotMNVN0xuh8kBkJwBidD+IzRufLmlvFokDt+TJpHHAOsCDw\neTN7TtIqZjatbY0YZkVnjM4HmbHipg2JovNBfMbofFlzqq1r05jZc/j88CWBv01505RULqvexY46\nStEZo/NBZozAGJ0P4jNG58uaU1UcwOuAB4EDJG0AvlKiNXTRWIsrt9ZU0Rmj80FmnK0OZozOB/EZ\no/NlJY1s9xea2XuSrgNewL2kwyk6Y3Q+yIwRFJ0P4jNG58vqVVt9RrKysrKysrKyGlXpOFs3jPNF\nZ4zOB5kxgqLzQXzG6HzdrtwzkpWVlZWVlVWpsqWZlZWVlZWVVamyMZKVlZWVlZVVqbIxkpWVlZWV\nlVWpsjGSlZWVlZWVVamyMZKVlZWVlZVVqbIxkpWVlZWVlVWpsjGSlZWVlZWVVamyMZKVlZWVlZVV\nqbIxkpWVlZWVlVWpsjGSlZWVlZWVVan+AskBZf4DjpGIAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f68201d06d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "result = DataSet(disag_filename)\n",
    "res_elec = result.buildings[1].elec\n",
    "predicted = res_elec['microwave']\n",
    "ground_truth = test_elec['microwave']\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "predicted.plot()\n",
    "ground_truth.plot()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally let's see the metric results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "============ Recall: 0.997835349341\n",
      "============ Precision: 0.742378777703\n",
      "============ Accuracy: 0.741308963402\n",
      "============ F1 Score: 0.851357054837\n",
      "============ Relative error in total energy: 0.871686427835\n",
      "============ Mean absolute error(in Watts): 32.2338755931\n"
     ]
    }
   ],
   "source": [
    "import metrics\n",
    "rpaf = metrics.recall_precision_accuracy_f1(predicted, ground_truth)\n",
    "print(\"============ Recall: {}\".format(rpaf[0]))\n",
    "print(\"============ Precision: {}\".format(rpaf[1]))\n",
    "print(\"============ Accuracy: {}\".format(rpaf[2]))\n",
    "print(\"============ F1 Score: {}\".format(rpaf[3]))\n",
    "\n",
    "print(\"============ Relative error in total energy: {}\".format(metrics.relative_error_total_energy(predicted, ground_truth)))\n",
    "print(\"============ Mean absolute error(in Watts): {}\".format(metrics.mean_absolute_error(predicted, ground_truth)))"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [conda env:nilmtk-env]",
   "language": "python",
   "name": "conda-env-nilmtk-env-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
